package com.ethink.warehouse.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ethink.warehouse.api.component.request.WarehouseEtonbaoConfirmInStockRequest;
import com.ethink.warehouse.api.component.request.WarehouseEtonbaoConfirmOutStockRequest;
import com.ethink.warehouse.api.request.*;
import com.ethink.warehouse.api.response.*;

import java.util.List;

/**
 * 物流跟进单 Service接口
 *
 * @author default
 * @date 2022-11-10
 */
public interface LogisticsTraceOrderService {

    /**
     * 分页查询
     *
     * @param request
     * @return
     */
    Page<LogisticsTraceOrderQueryResponse> queryLogisticsTraceOrder(LogisticsTraceOrderQueryRequest request);

    /**
     * 货品模式分页查询
     *
     * @param request
     * @return
     */
    Page<LogisticsTraceOrderQueryGoodsModeResponse> queryLogisticsTraceOrderGoodsMode(LogisticsTraceOrderQueryGoodsModeRequest request);

    /**
     * 查询详情
     *
     * @param logisticsTraceOrderId
     * @return
     */
    LogisticsTraceOrderGetDetailResponse getLogisticsTraceOrderById(Long logisticsTraceOrderId);

    /**
     * 待确认明细列表
     *
     * @param logisticsTraceOrderId
     * @return
     */
    List<LogisticsTraceOrderListRkConfirmDetailResponse> listLogisticsTraceOrderRkConfirmDetail(Long logisticsTraceOrderId);


    /**
     * 新增
     *
     * @param request
     * @return
     */
    LogisticsTraceOrderAddResponse addLogisticsTraceOrder(LogisticsTraceOrderAddRequest request);

    /**
     * 修改
     *
     * @param request
     * @return
     */
    void updateLogisticsTraceOrder(LogisticsTraceOrderUpdateRequest request);

    /**
     * 更新流程
     *
     * @param request
     * @return
     */
    LogisticsTraceOrderUpdateStepResponse updateLogisticsTraceOrderStep(LogisticsTraceOrderUpdateStepRequest request);

    /**
     * 返回上一步
     *
     * @param request
     */
    void backLogisticsTraceOrderPreviousStep(LogisticsTraceOrderBackPreviousStepRequest request);

    /**
     * 删除
     *
     * @param logisticsTraceOrderId
     * @return
     */
    void deleteLogisticsTraceOrder(Long logisticsTraceOrderId);

    /**
     * OA提交
     *
     * @param request
     */
    void submitLogisticsTraceOrderOA(LogisticsTraceOrderOaSubmitRequest request);

    /**
     * OA审核通过
     *
     * @param request
     */
    void approvedLogisticsTraceOrderOA(LogisticsTraceOrderOaApprovedRequest request);

    /**
     * 青岛仓易通宝平台入库确认
     *
     * @param request
     */
    void etonbaoInStockConfirm(WarehouseEtonbaoConfirmInStockRequest request);

    /**
     * 青岛仓易通宝平台出库确认
     *
     * @param request
     */
    void etonbaoOutStockConfirm(WarehouseEtonbaoConfirmOutStockRequest request);

}